package cn.chen.数据结构.链表;

/**
 * 这是一个单向环形链表
 * */
public class LoopLinkedList {

    public HeroNode head=null;  // 用于作为环形链表的一个访问的入口
    public int maxSize;   // 用于计数链表长度的


    // 添加元素,按照顺序添加
    public void insertNode(HeroNode node){

        if(isEmpty()) {
            head = node;
            head.next=head; // 自己指向自己
            maxSize++;
            return;
        }
        HeroNode temp=head;
        if(temp.next==temp){    // 链表只有一个节点

            maxSize++;
            // 插入节点
            temp.next=node;
            node.next=temp;
            // 将head指向最小节点
            if(temp.no>=node.no)
                head=node;
            return;
        }
        while(true){

            if(temp.no<=node.no&&temp.next.no>node.no){// 第一个是正常情况：1<2<3 5 19

                maxSize++;
                node.next=temp.next;
                temp.next=node;
                break;
            }
            // 5 19
            if(temp.next==head){  //该节点是最后一个节点

                if(temp.no>node.no) {   // 最后一个节点比要插入的大，这时候这个节点是最小的节点

                    maxSize++;
                    node.next = temp.next;
                    temp.next = node;

                    head = node;  // 将head指向最小的节点
                    break;
                }
                if(temp.no<=node.no){   // 最后一个节点比要插入的小，这时候这个节点是最大的节点

                    maxSize++;
                    node.next=temp.next;
                    temp.next=node;

                    break;
                }
            }
            temp=temp.next;
        }
    }
    // 遍历单向环形链表
    public void showNode(){

        if(isEmpty()){

            System.out.println("链表为空");
            return;
        }
        HeroNode temp=head;
        int count=0;
        while(count++<maxSize){

            System.out.println(temp.toString()+count);
            temp=temp.next;
        }
    }
    // 获取环形链表的最小的节点（这里我们把环形链表的节点设置为最小节点）
    public HeroNode getHead(){

        return head;
    }

    // 判断环形链表是否为空
    public boolean isEmpty(){

        return head==null;
    }


}
